package com.atguigu.jxc.dao;

import com.atguigu.jxc.entity.Goods;
import org.apache.ibatis.annotations.Param;

import java.util.ArrayList;
import java.util.List;

/**
 * @description 商品信息
 */
public interface GoodsDao {


    String getMaxCode();

    List<Goods> listInventory(@Param("offset") Integer offset, @Param("rows") Integer rows, @Param("codeOrName") String codeOrName, @Param("goodsTypeId") Integer goodsTypeId);

    Integer listInventoryCount(@Param("offset") Integer offset, @Param("rows") Integer rows, @Param("codeOrName") String codeOrName, @Param("goodsTypeId") Integer goodsTypeId);

    List<Goods> listInventoryEx(@Param("offset") Integer offset, @Param("rows") Integer rows, @Param("codeOrName") String codeOrName, @Param("goodsTypeIds") List<Integer> goodsTypeIds);

    Integer listInventoryCountEx(@Param("offset") Integer offset, @Param("rows") Integer rows, @Param("codeOrName") String codeOrName, @Param("goodsTypeIds") List<Integer> goodsTypeIds);

    Integer countInteger();

    List<Goods> listByNameAndType(@Param("offset") Integer offset, @Param("rows") Integer rows, @Param("goodsName") String goodsName, @Param("goodsTypeId") Integer goodsTypeId);

    Integer listByNameAndTypeCount(@Param("offset") Integer offset, @Param("rows") Integer rows, @Param("goodsName") String goodsName, @Param("goodsTypeId") Integer goodsTypeId);

    List<Goods> listByNameAndTypeEx(int offset, int pageSize, String goodsName, @Param("goodsTypeIds") List<Integer> goodsTypeIds);

    Integer listByNameAndTypeCountEx(int offset, int pageSize, String goodsName, @Param("goodsTypeIds") List<Integer> goodsTypeIds);

    void update(Goods good);

    void save(Goods good);

    Goods selectGood(Integer goodsId);

    void deleteGood(Integer goodsId);

    List<Goods> getNoInventoryQuantity(@Param("offset") Integer offset,@Param("pageSize") int pageSize,@Param("nameOrCode") String nameOrCode);

    Long getNoInventoryQuantityCount();

    List<Goods> getHasInventoryQuantity(@Param("offset") Integer offset, @Param("pageSize") int pageSize,@Param("nameOrCode") String nameOrCode);

    Long getHasInventoryQuantityCount();

    Long updateGoodStock(@Param("goodsId") Integer goodsId, @Param("inventoryQuantity") Integer inventoryQuantity, @Param("purchasingPrice") double purchasingPrice);

    Long updateGoodStockState(@Param("goodsId") Integer goodsId, @Param("state") Integer state);

    List<Goods> listAlarmGoods();
}
